import java.util.*;

public class Main {
    public static void main(String[] args) {
        Deque<Integer> deque = new LinkedList<>(); //链式实现的双端队列
        Deque<Integer> deque1 = new ArrayDeque<>(); //数组实现的双端队列
        Deque<Integer> deque2 = new ArrayDeque<>(); //可以当作栈来使用
        Stack<Integer> stack = new Stack<>();//一个栈
        deque2.push(1);
        deque2.push(2);
        deque2.push(3);
        // 队列实现栈
        // 一个队列是无法实现栈的
        // 需要用到两个队列
        // "入栈" ： 往不为空的队列
        // "出栈" ： 不为空的队列，出size-1个元素到另一个队列当中
        // 如果两个队列都为空，那么放进第一个队列当中


    }
    public static void main4(String[] args) {
        Deque<Integer> deque = new LinkedList<>();//双端队列
        Queue<Integer> queue = new LinkedList<>();// 队列
        LinkedList<Integer> queue1 = new LinkedList<>(); //栈
        List<Integer> list = new LinkedList<>(); //链表
    }
    public static void main3(String[] args) {
        // 栈可以是数组实现也可以是链表实现
        // 单向链表实现
        // 双向链表实现
        // LinkedList


        //用数组实现队列
        // 需要将数组设置成环形
        // rear定义成
        // front定义为头节点
        //定义usedSize来判断空间是否满了
        // 或者牺牲一个空间来判断是否满了

        //怎么让 rear从7位置走到0位置
        // 取模 （ rear+1 ） %  len (数组长度)

        // 用保留一个位置来写循环队列

    }
    public static void main2(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        //LinkedList<Integer> queue1 = new LinkedList<>();   // 这两者的区别就是
        // 第二个能够调用的方法更多一些，而第一个能够调用的方法会有些局限

        queue.offer(1);   // 相当于是一个尾插法
        queue.offer(2);
        queue.offer(3);
        queue.offer(7);
        queue.offer(5);
        System.out.println(queue.peek());  // peek 拿的是队列的头部
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
    }
    public static void main1(String[] args) {
        System.out.println("Hello world!");
        MyQueue myQueue = new MyQueue();
        myQueue.offer(1);
        myQueue.offer(2);
        myQueue.offer(3);
        myQueue.offer(4);
        System.out.println(myQueue.peek()); // 1
        System.out.println(myQueue.poll()); // 1
        System.out.println(myQueue.poll()); // 2
        System.out.println(myQueue.poll()); // 3
        System.out.println(myQueue.empty()); //false
    }
}